<?php
class Controller_Actualite extends Controller_Template
{
	public function __construct()
	{
		parent::__construct();
		$this->selfModel = new Model_MapperActualite("actualite", parent::$db);
	}
	
	public function index()
	{
		$pager = new Pager($this->selfModel, Config::get_slot('actualites_max_page', 20), Model_TableActualite::count());
		$pager->setQuery('getAll');
		$pager->init();
		header('Content-Type: text/html; charset=utf-8');
		require('view/actualite/index.php');
	}

        public function create()
	{
            $valid = false;
            $erreurs = array();//pour affichage des erreurs

            //affichage du formulaire
            $form = new Formulaire('actualite', '#', 'POST');

            $form->addAttribut('id', 'actualite_form');

            $titre = new ChampText('titreactualite', 'Titre', true);
            $titre->addValidateur(new ValidateurText(100));

            $commune = new ChampList('commune', 'Commune', false, true);

            //récupération de la liste des communes
            $mappercommune = new Model_MapperCommune('commune', self::$db);
            $communes = $mappercommune->getAll();
            foreach($communes as $com)
            {
               $commune->addOption($com->getNom(), $com->getCode_postal() . ' ' .$com->getNom(), $com->getId_commune());
            }

            $image = new ChampUpload('imageactualite', 'Image', true);
            $image->setUploadRep("../images");
            $image->addAttribut('accept', 'image/*');
            $image->addValidateur(new ValidateurExtension("gif|jpeg|png|jpg"));

            $contenu = new ChampTextArea('contenuactualite', 'Contenu', true);
            $contenu->addAttribut('cols', '50');
            $contenu->addAttribut('rows', '100');
            $contenu->addAttribut('class', 'tinymce');
            $contenu->addAttribut('id', 'tinymce');
            
            $tags = new ChampText('tagsactualite', 'Tags');

            $publie = new ChampCheckBox('publieactualite', 'Publie', '1');
            

            $submit = new ChampSubmit('submit', 'Valider');
            $submit->addAttribut('class', 'button');

            //groupe info
            $fieldgeneral = new ChampFieldSet('fgeneral', 'Général');
            $fieldgeneral->addChamp($titre);
            $fieldgeneral->addChamp($commune);
            $fieldgeneral->addChamp($publie);
            $fieldgeneral->addChamp($image);

            //groupe contenu
            $fieldcontenu = new ChampFieldSet('fcontenu', 'Contenu');
            $fieldcontenu->addChamp($contenu);
            $fieldcontenu->addChamp($tags);

            //ajout des champs au formulaire
            $form->addChamp($fieldgeneral);
            $form->addChamp($fieldcontenu);
            $form->addChamp($submit);
            //specifie l'enctype pour l'upload
            $form->addAttribut('enctype', 'multipart/form-data');

            if(isset($_POST['formid']) && !empty($_POST['formid']) )
            {
                //formulaire soumis on recharge les valeurs et on valide le formulaire
                $form->bind();

                if($form->valider() )
                {
                    //ajout de l'actualite
                    $actualite = new Model_Actualite();
                    $actualite->setId_actualite(-1);
                    $actualite->setTitre($titre->getValeur());

                    //redimensionnement et renommage de l'image de l'article vers png
                    //$actualite->setImage($image->getValeur());
                    $imgsrc = '../images' . $image->getValeur();
                    $imgdst = 'images/actualite-' . date('Y-m-d_h:i:s', time());
                    $imgdst.=".png";

                    resize_image($imgsrc, '../'.$imgdst, 150, 150);
                    $actualite->setImage($imgdst);

                    $actualite->setContenu($contenu->getValeur());
                    $actualite->setTags($tags->getValeur());
                    $actualite->setPublie($publie->getChecked()?"1":"0");
                    $date = new DateTime();
                    $actualite->setDate_creation($date->format('Y-m-j H:i:s'));
                    $actualite->setDate_modification($date->format('Y-m-j H:i:s'));

                    $mapper_association = new Model_MapperAssociation('association', self::$db);
                    $association = $mapper_association->getOne($_SESSION['idassoc']);
                    $actualite->setAssociation($association);

                    $getcommune = $mappercommune->getOne($commune->getValeur());
                    $actualite->setCommune($getcommune);

                    $this->selfModel->save($actualite);
                    $valid = true;
                }
                else
                {
                    //récupération des erreurs dans un tableau
                    //pour affichage dans la vue
                    foreach($form->getChamps() as $champ)
                    {
                        if($champ->isvalid == false)
                        {
                            $temp = array();
                            foreach($champ->getErreurs() as $erreur)
                            {
                                $temp[] = $erreur;
                            }
                            $erreurs[$champ->__toString()] = $temp;
                        }
                    }
                }
            }

            header('Content-Type: text/html; charset=utf-8');
            require('view/actualite/new-edit.php');
	}

        public function edit($id)
	{
            $actualite = $this->selfModel->getOne($id);
            $valid = false;
            $erreurs = array();//pour affichage des erreurs

            if(!is_null($actualite))
            {
                //affichage du formulaire
                $form = new Formulaire('actualite', '#', 'POST');

                $form->addAttribut('id', 'actualite_form');

                $titre = new ChampText('titreactualite', 'Titre', true);
                $titre->addValidateur(new ValidateurText(100));

                $commune = new ChampList('commune', 'Commune', false, true);

                //récupération de la liste des communes
                $mappercommune = new Model_MapperCommune('commune', self::$db);
                $communes = $mappercommune->getAll();
                foreach($communes as $com)
                {
                   $commune->addOption($com->getNom(), $com->getCode_postal() . ' ' .$com->getNom(), $com->getId_commune());
                }

                $contenu = new ChampTextArea('contenuactualite', 'Contenu', true);
                $contenu->addAttribut('cols', '50');
                $contenu->addAttribut('rows', '100');
                $contenu->addAttribut('class', 'tinymce');
                $contenu->addAttribut('id', 'tinymce');
               
                $tags = new ChampText('tagsactualite', 'Tags');

                $publie = new ChampCheckBox('publieactualite', 'Publie', '1');

                $submit = new ChampSubmit('submit', 'Valider');
                $submit->addAttribut('class', 'button');

                //groupe info
                $fieldgeneral = new ChampFieldSet('fgeneral', 'Général');
                $fieldgeneral->addChamp($titre);
                $fieldgeneral->addChamp($commune);
                $fieldgeneral->addChamp($publie);
                
                //groupe contenu
                $fieldcontenu = new ChampFieldSet('fcontenu', 'Contenu');
                $fieldcontenu->addChamp($contenu);
                $fieldcontenu->addChamp($tags);

                //ajout des champs au formulaire
                $form->addChamp($fieldgeneral);
                $form->addChamp($fieldcontenu);
                $form->addChamp($submit);

                //modification on charge les valeurs de l'actualité
                $titre->bind($actualite->getTitre());
                $publie->bind($actualite->getPublie());
                $commune->bind($actualite->getCommune()->getId_commune());
                $contenu->bind($actualite->getContenu());
                $tags->bind($actualite->getTags());

                if(isset($_POST['formid']) && !empty($_POST['formid']) )
                {
                    //formulaire soumis on recharge les valeurs et on valide le formulaire
                    $form->bind();

                    if($form->valider() )
                    {
                        //ajout de l'actualité
                        $actualite->setTitre($titre->getValeur());        
                        $actualite->setContenu($contenu->getValeur());
                        $actualite->setTags($tags->getValeur());
                        $actualite->setPublie($publie->getChecked()?"1":"0");
                        $date = new DateTime();
                        $actualite->setDate_modification($date->format('Y-m-j H:i:s'));

                        $mapper_association = new Model_MapperAssociation('association', self::$db);
                        $association = $mapper_association->getOne($_SESSION['idassoc']);
                        $actualite->setAssociation($association);

                        $getcommune = $mappercommune->getOne($commune->getValeur());
                        $actualite->setCommune($getcommune);

                        $this->selfModel->save($actualite);
                        $valid = true;
                    }
                    else
                    {
                        //récupération des erreurs dans un tableau
                        //pour affichage dans la vue
                        foreach($form->getChamps() as $champ)
                        {
                            if($champ->isvalid == false)
                            {
                                $temp = array();
                                foreach($champ->getErreurs() as $erreur)
                                {
                                    $temp[] = $erreur;
                                }
                                $erreurs[$champ->__toString()] = $temp;
                            }
                        }
                    }
                }

                header('Content-Type: text/html; charset=utf-8');
                require('view/actualite/new-edit.php');
            }
            else
            {
                    $message = "Actualité non trouvée";
                    header('Content-Type: text/html; charset=utf-8');
                    require('view/erreur/show.php');
            }
	}

        public function adminindex()
        {
            	$pager = new Pager($this->selfModel, Config::get_slot('actualites_max_page', 20), Model_TableActualite::count());
		$pager->setQuery('getAll');
		$pager->init();
		header('Content-Type: text/html; charset=utf-8');
		require('view/actualite/adminindex.php');
        }
	
	public function show($id)
	{
		$actualite = $this->selfModel->getOne($id);
		
		if(!is_null($actualite))
		{
			header('Content-Type: text/html; charset=utf-8');
			require('view/actualite/show.php');
		}
		else
		{
			$message = "Actualité non trouvée";
			header('Content-Type: text/html; charset=utf-8');
			require('view/erreur/show.php');
		}
	}

        public function delete($id)
	{
		$actualite = $this->selfModel->getOne($id);

		if(!is_null($actualite))
		{
                    $this->selfModel->delete($actualite);
                    header('Content-Type: text/html; charset=utf-8');
                    require('view/actualite/delete.php');
		}
		else
		{
			$message = "Actualité non trouvée";
			header('Content-Type: text/html; charset=utf-8');
			require('view/erreur/show.php');
		}
	}
}